SportsClient copy.tsx 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121
  1. "use client";
  2. import { GameInfo } from "@/api/home";
  3. import { useRouter } from "@/i18n/routing";
  4. import { server } from "@/utils/client";
  5. import { useTranslations } from "next-intl";
  6. import Script from "next/script";
  7. import { FC, useEffect, useRef,useState } from "react";
  8. // 之前版本备份
  9. interface Props {
  10. brand_id: string;
  11. token: string;
  12. }
  13. // dedprz | deepwin365 | damslots | chips | deloro-casino
  14. const SportsClient: FC<Props> = (props) => {
  15. const t = useTranslations("ProfilePage");
  16. const { brand_id, token } = props;
  17. const [currentToken, setCurrentToken] = useState(token);
  18. const btRef = useRef(null);
  19. const router = useRouter();
  20. useEffect(() => {
  21. // @ts-ignore
  22. if (window.BTRenderer) {
  23. onLoad();
  24. }
  25. // 离开体育页的时候需要kill掉
  26. return () => {
  27. // @ts-ignore
  28. btRef.current?.kill();
  29. };
  30. }, []);
  31. useEffect(() => {
  32. // 如果token更新了才调用update
  33. if( currentToken !== token){
  34. updateToken(token);
  35. }
  36. }, [token]);
  37. const getGameDetailApi = async () => {
  38. const data = await server
  39. .request<GameInfo>({
  40. url: "/v1/api/front/game_info_by_id",
  41. method: "post",
  42. data: { id: "sportsBet", mode: 1 },
  43. })
  44. .then((res) => {
  45. if (res.code === 200) {
  46. setCurrentToken(res.data.game_url)
  47. return res.data.game_url;
  48. } else {
  49. return "";
  50. }
  51. });
  52. return data;
  53. };
  54. const updateToken = (newToken: string) => {
  55. // @ts-ignore
  56. if(currentToken!== newToken){
  57. setCurrentToken(newToken);
  58. }
  59. // @ts-ignore
  60. if (window.BTRenderer) {
  61. onLoad();
  62. }
  63. }
  64. const onLoad = () => {
  65. // @ts-ignore
  66. const bt = new BTRenderer();
  67. btRef.current = bt;
  68. // bt.updateOptions({url:'/'})
  69. bt.initialize({
  70. brand_id: brand_id,
  71. token: token,//使用最新的token
  72. onTokenExpired: getGameDetailApi, //过期自动更新token
  73. onSessionRefresh: () => {
  74. // 销毁之前的实例并等待刷新完成
  75. if(btRef.current){
  76. // @ts-ignore
  77. btRef.current?.kill();
  78. }
  79. router.refresh()
  80. },
  81. themeName: "default",
  82. lang: "pt-br",
  83. target: document.getElementById("betby"),
  84. betSlipOffsetBottom: 80,
  85. // betSlipOffsetRight: 750,
  86. betSlipZIndex: 1000,
  87. stickyTop: 0,
  88. betSlipOffsetTop: 50,
  89. onRecharge: function () {
  90. router.push("/deposit");
  91. },
  92. onRouteChange: function () {
  93. },
  94. onLogin: function () {},
  95. onRegister: function () {},
  96. onBetSlipStateChange: function () {},
  97. });
  98. };
  99. return (
  100. <>
  101. <div id="betby" className={"h-[100%]"}></div>
  102. <Script src={"https://ui.invisiblesport.com/bt-renderer.min.js"} onLoad={onLoad} />
  103. </>
  104. );
  105. };
  106. export default SportsClient;